// 首先先引入aixos
import axios from "axios";
// 创建一个axios 实例
const api = axios.create({
  baseURL: "/api", // 在路径中添加
  timeout: 5000, // 超时时间
});
// 请求拦截
api.interceptors.request.use(
  (config) => {
    let token = window.localStorage.token;
    if (token) {
      config.headers.Authorization = "Bearer" + token; //如果token 存在，就带上token
    } else {
      config.headers["token"] = ""; //return
    }

    return config;
  },
  (error) => {
    Promise.reject(error);
  }
);
// 响应拦截
/**
响应拦截也是一样，最基本的可以把返回出来的一些数据做简单处理，
比如把请求回来的提示信息解构出来，给予提示，这样就不用在每次请求完成后单独去写
这里用的是element-ui 里面的提示
**/
api.interceptors.response.use(
  (res) => {
    // res为返回的消息(根据服务器返回的数据进行结构)

    return res;
  },
  (error) => {
    //处理网络错误
    let msg: String = "";
    let status = error.response.status;
    switch (status) {
      case 401:
        msg = "token过期";
        break;
      case 403:
        msg = "无权访问";
        break;
      case 404:
        msg = "请求地址错误";
        break;
      case 500:
        msg = "服务器出现问题";
        break;
      default:
        msg = "无网络";
    }
    console.log(msg);
    return Promise.reject(error);
  }
);
// 最后导出

export default {
  get(url: string, params = {}) {
    return new Promise((resolve, reject) => {
      api
        .get(url, {
          params,
        })
        .then((res) => {
          resolve(res.data);
        })
        .catch((err) => {
          reject(err);
        });
    });
  },
  post(url: string, params = {}) {
    return new Promise((resolve, reject) => {
      api
        .post(url, JSON.stringify(params))
        .then((res) => {
          resolve(res.data);
        })
        .catch((err) => {
          reject(err);
        });
    });
  },
};
